1. Technical Field
The present invention relates in general to an improved data processing system and in particular to a method and system for nonsequential instruction dispatch and execution in a superscalar processor system. Still more particularly, the present invention relates to a method and system for nonsequential instruction dispatch and execution in a superscalar processor system which permits accurate reporting of interrupts and execution.
2. Description of the Related Art
Designers of modern state-of-the-art data processing systems are continually attempting to enhance performance aspects of such systems. One technique for enhancing data processing efficiency is the achievement of short cycle times and a low Cycles-Per-Instruction (CPI) ratio. An excellent example of the application of these techniques to an enhanced data processing system is the International Business Machines Corporation RISC System/6000 (RS/6000) computer. The RS/6000 system is designed to perform well in numerically intensive engineering and scientific applications as well as in multi-user, commercial environments. The RS/6000 processor employs a superscalar implementation, which means that multiple instructions are issued and executed simultaneously.
The simultaneous issuance and execution of multiple instructions requires independent functional units that can execute concurrently with a high instruction bandwidth. The RS/6000 system achieves this by utilizing separate branch, fixed point and floating point processing units which are pipelined in nature. In view of the pipelined nature of the processors in such systems care must be taken to ensure that a result from a particular instruction which is necessary for execution of a subsequent instruction is obtained prior to dispatching the subsequent instruction. One technique for ensuring that such so-called "data dependency hazards" do not occur is the restriction of the dispatching of a particular instruction until such time as all preceding instructions have been dispatched. While this technique ensures that data dependency hazards will not occur, the performance penalty encountered utilizing this technique is substantial.
As a consequence, modern superscalar data processing systems often utilize a so-called "data dependency interlock circuit." Such circuits contain logic which operates in concert with instruction dispatch circuitry to ensure that an instruction is not dispatched until such time as a result from a preceding instruction which is necessary for correct execution of that instruction has been obtained. The amount of logic required to implement a data dependency interlock circuit is directly proportional to the number of source operands within each instruction. A source operand is a field within an instruction which is utilized to access an operand within a register file, for utilization in execution of that instruction.
While data dependency interlock circuits permit data dependency hazards to be avoided without encountering the substantial performance penalty described above, the design and implementation of data dependency interlock circuits for instructions which include larger numbers of source and destination operands becomes quite complex.
The data dependency hazards which occur with the simultaneous executing of multiple instructions in each processor cycle have also been addressed by utilizing an approach known as "register renaming." Register renaming is a technique utilized to temporarily place the results of a particular instruction into a register for potential use by later instructions prior to the time the final result from an instruction is placed within a register file. Register renaming is generally accomplished by providing a register file array with extra locations and a pointer arrangement to identify particular physical registers which have been assigned to logical registers. Selected prior art approaches also utilize multiple register file arrays to provide many "read" ports for data or for holding previous results for backup in the case of exceptions.
While this technique provides the ability to simultaneously dispatch and execute multiple instructions where serial execution might otherwise be necessary, a problem exists with the dispatching of instructions to execution units utilizing such techniques. The execution of more than one instruction during a single processor cycle may cause hazards which the processor must handle in a correct manner. One hazard that such processors must be able to handle is the reporting of precise exceptions. That is, the ability to accurately distinguish which instruction in a series of instructions created an exception which must be corrected in order to resume normal processing.
It should therefore be apparent that a need exist for a method and system which permit nonsequential instruction dispatch and execution within a superscalar processor system while supporting precise interrupts by permitting instructions to be executed nonsequentially while assembling results in an application specified ordered sequence.